package de.fhd.pms.dao;

import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import de.fhd.pms.model.Automobil;
import de.fhd.pms.model.Fahrt;
import de.fhd.pms.model.Standort;
import de.fhd.pms.model.Teilnehmer;

/**
 * Data-Access-Object (DTO) von Standort.
 * <p>
 * DTO wird verwendet, um Persistenz bzw. den Zugriff auf eine Datenbank zu
 * gewährleisten, ohne spezielle datenbankabhängigen Befehle.
 * 
 * @author Martin Schmid
 * @author Florian Schachner
 */
public class StandortDao extends HibernateDaoSupport {

	private static Logger log = Logger.getLogger(StandortDao.class);

	/**
	 * Save-Methode von StandortDAO.
	 * <p>
	 * Hierbei wird eine Standortinstanz als Parameter an die Methode übergeben
	 * und gespeichert.
	 * 
	 * @param standort
	 *            - ein {@link Standort} wird in der Datenbank gespeichert
	 * @return standort
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	public Standort save(Standort standort) {
		log.info("STANDORTDAO: save()");
		HibernateTemplate template = getHibernateTemplate();
		template.saveOrUpdate(standort);
		return standort;
	}

	/**
	 * FindById-Methode von StandortDAO.
	 * <p>
	 * Hierbei wird die Suche nach einer Standortinstanz anhand des
	 * Primärschlüssels ermöglicht.
	 * 
	 * @param id {@link Integer} - Primärschlüssel eines {@link Standort}
	 * @return standort {@link Standort}
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	public Standort findById(int id) {
		log.info("STANDORTDAO: findById()");
		HibernateTemplate template = getHibernateTemplate();
		return (Standort) template.get(Standort.class, id);
	}

	/**
	 * FindAll-Methode von StandortDAO.
	 * <p>
	 * Hierbei wird die Suche nach allen Standorten ermöglicht.
	 * 
	 * @return results - eine Liste von Standort-Objekten
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	@SuppressWarnings("unchecked")
	public List<Standort> findAll() {
		log.info("STANDORTDAO: findAll()");
		HibernateTemplate template = getHibernateTemplate();
		@SuppressWarnings("rawtypes")
		List results = template.loadAll(Standort.class);
		return results;
	}

	/**
	 * Delete-Methode von StandortDAO.
	 * <p>
	 * Hierbei wird das Löschen einer Standortinstanz ermöglicht.
	 * 
	 * @param standort - {@link Standort} wird gelöscht
	 * @author Martin Schmid
	 * @author Florian Schachner
	 */
	public void delete(Standort standort){
		log.info("STANDORTDAO: delete()");
		HibernateTemplate template = getHibernateTemplate();
		template.delete(standort);
	}

}
